package com.lzh.o2o.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.imageio.ImageIO;

import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.lzh.o2o.dto.ImageHolder;
import com.lzh.o2o.web.superadmin.AreaController;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
//Thread.currentThread()
public class ImageUtil {
		//获取项目src/main/resources下面的根路径
		//String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
	 		public static String basePath="C:/Program Files/Git/o2o/target/classes";
	 		//为时间格式化
	 		public static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	 		public static final Random r=new Random();
	 		public static final Logger logger=LoggerFactory.getLogger(ImageUtil.class);

	 		/**
	 		 * 处理商铺缩略图 SPring自带的文件处理对象
	 		* @Title: generateThumbnail 
	 		* @Description: TODO 
	 		* @param thumbnail
	 		* @param targetAddr
	 		* @return String
	 		* @author haohao
	 		* @date 2018年9月9日下午2:37:19
	 		 */
	 		public static String generateThumbnail(ImageHolder thumbnail,String targetAddr){
			//获取随机文件名,防止文件名重名
	 		String realFileName =getRandomFile();
	 		//获取文件扩展名
			String extension =getFileExtension(thumbnail.getImageName());
			//在文件不存在的时候创建
			makeDirPath(targetAddr);
			String relativeAddr=targetAddr+realFileName+extension;
			logger.debug("current relativeAddr is:"+relativeAddr);
			File dest= new File(PathUtil.getImgBasePath()+relativeAddr);
			logger.debug("current complete add is:"+PathUtil.getImgBasePath()+relativeAddr);
			logger.debug("basePath is:"+basePath);
			try{
				Thumbnails.of(thumbnail.getImage()).size(200, 200)
				.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(basePath+"/xiao.png")),0.5f)
				.outputQuality(0.8f).toFile(dest);
				
			}catch(Exception e){
				logger.error(e.toString());
				throw new RuntimeException("创建缩略图失败:"+e.toString());
				
			}
			return relativeAddr;
		}
	
	 		
	 		//创建商品详情图的缩略图
			public static String generateNormalImg(ImageHolder thumbnail,String targetAddr){
				//获取随机文件名,防止文件名重名
		 		String realFileName =getRandomFile();
		 		//获取文件扩展名
				String extension =getFileExtension(thumbnail.getImageName());
				//在文件不存在的时候创建
				makeDirPath(targetAddr);
				String relativeAddr=targetAddr+realFileName+extension;
				logger.debug("current relativeAddr is:"+relativeAddr);
				File dest= new File(PathUtil.getImgBasePath()+relativeAddr);
				logger.debug("current complete add is:"+PathUtil.getImgBasePath()+relativeAddr);
				logger.debug("basePath is:"+basePath);
				try{
					Thumbnails.of(thumbnail.getImage()).size(337, 640)
					.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(basePath+"/xiao.png")),0.5f)
					.outputQuality(0.9f).toFile(dest);
					
				}catch(Exception e){
					logger.error(e.toString());
					throw new RuntimeException("创建缩略图失败:"+e.toString());
					
				}
				return relativeAddr;
			}
	 		//创建目标路径所设计到的目录.即/D:/*/xxx.jpg; *是要创建得
	 	
	 		private static void makeDirPath(String targetAddr) {
				//要先得到目标地址的绝对路径
	 			String realFileParentPath =PathUtil.getImgBasePath()+targetAddr;
	 			File dirPath = new File(realFileParentPath);
	 			if(!dirPath.exists()){
	 				dirPath.mkdirs();
	 			}
			}


			/**
	 		 * 
	 		* @Title: getFileExtension 
	 		* @Description: 获取输出文件流的扩展名  后缀应该为.jpg或.png
	 		* @param thumbnail
	 		* @return String
	 		* @author haohao
	 		* @date 2018年9月9日上午11:06:30
	 		 */
		private static String getFileExtension(String fileName) {
				//不用File类型，直接用String类型返回.
				//String originFileName = cfile.getName();
				return fileName.substring(fileName.lastIndexOf("."));
			}



		/**
		 * 
		* @Title: getRandomFile 
		* @Description: 生成随机文件名，每个文件名不同，生成随机文件名，当前年月日小时分钟秒钟+五位随机数 
		* @return String
		* @author haohao
		* @date 2018年9月9日上午11:01:34
		 */
		public static String getRandomFile() {
			//获取随机的五位数
			int rannum =r.nextInt(89999)+10000;
			String nowTimeStr =sDateFormat.format(new Date());
			return nowTimeStr+rannum;
		}

		/**
		* 删除文件或目录下的文件
		* 
		* @Title: deleteFilePath 
		* @Description: 如果是storePath是文件路径，则删除该文件 ，如果是目录路径，就删除该目录下的所有文件
		* @param storePath :文件路径或者目录路径
		* @author haohao
		* @date 2018年9月9日下午2:43:20
		 */
		public static void deleteFilePath(String storePath){
			//获取全路径:
			File fileOrPath=new File(PathUtil.getImgBasePath()+storePath);
			//存在
			if(fileOrPath.exists()){
				//如果是目录
				if(fileOrPath.isDirectory()){
				File[] files = fileOrPath.listFiles();
				for(int i =0;i<files.length;i++){
					files[i].delete();
				}
				}
				//删除文件或文件夹
				fileOrPath.delete();
			}
		}

		public static void main(String[] args) {
			try {
			Thumbnails.of(new File("D:/IO/youyongquan.jpg")).size(400, 300)
			.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(basePath + "/xiao.png")), 0.5f)
			.outputQuality(0.8).toFile(new File("D:/IO/youyongquannew1.jpg"));
			} catch (IOException e) {
			e.printStackTrace();
			}
			}
			
		
}
